﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Text;
using com.clinica.business.BE.gescot;
using com.clinica.business.BL.interfaces.gescot;
using com.clinica.DL.sql.gescot;
using com.clinica.business.entities;
using System.Configuration;
using com.clinica.DL.sql.comun;
using com.clinica.business.BE.comun;
using System.Xml;
/****************************************************************************************
 * Sistema    : Sistema de Gestión de Clinica
 * Modulo     : Facturación y Presupuestos
 * Descripción: 
 * Autor      : JPEREZ
 * Fecha      : 2011-06-01
 ****************************************************************************************/

namespace com.clinica.business.BL.gescot
{
    [ServiceBehavior(Name = "CotizacionBL",
  Namespace = "http://com.clinica.business.BL.interfaces.gescot",
  ConcurrencyMode = ConcurrencyMode.Multiple,
  InstanceContextMode = InstanceContextMode.PerSession,
  IncludeExceptionDetailInFaults = true)]
    public class CotizacionBL : ICotizacionBL
    {
        #region ICotizacionBL Members

        public List<CotizacionBE> ObternerSolCotizaciones(CotizacionBE request, DateTime dtFecha_Inicio, DateTime dtFecha_Fin)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<CotizacionBE> lstReturn = new List<CotizacionBE>();
            try
            {
                lstReturn = CotizacionDL.ObtenerSolicitudesCotizacion(request, dtFecha_Inicio, dtFecha_Fin);
                foreach (CotizacionBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }
        public List<com.clinica.business.BE.comun.ParametrosBE> ObternerTipoDocumento(com.clinica.business.BE.comun.ParametrosBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<ParametrosBE> lstResult = new List<ParametrosBE>();
            try
            {
                lstResult = ParametrosDL.ObtenerTabla(request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstResult;
        }
        public List<CotizacionBE> ObternerCotizacion(CotizacionBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<CotizacionBE> lstReturn = new List<CotizacionBE>();
            try
            {
                lstReturn = CotizacionDL.ObtenerSolicitudCotizacion(request);
                foreach (CotizacionBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        public int GuardarCotizacion(int accion, List<CotizacionBE> request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            int Resultado = 0;
            List<CotizacionBE> lst = new List<CotizacionBE>();
            try
            {
                XmlDocument doc = new XmlDocument();
                XmlNode root = doc.CreateElement("Cotizacion");
                doc.AppendChild(root);
                int secuencia = 0;
                foreach (CotizacionBE item in request)
                {
                    #region insercion/ actualizacion en sql del Detalle
                    try
                    {
                        secuencia++;
                        XmlElement newElem = doc.CreateElement("Registro");
                        #region Cabecera
                        newElem.SetAttribute("Fecha", item.Fecha.ToString("yyyyMMdd"));
                        newElem.SetAttribute("Observaciones", item.Observacion);
                        newElem.SetAttribute("CodigoMoneda", item.CodigoMoneda.ToString());
                        newElem.SetAttribute("CodPaciente", item.CodigoPaciente.ToString());
                        newElem.SetAttribute("CodigoEstado", item.CodigoEstado.ToString());
                        newElem.SetAttribute("Referencia", item.Referencia.ToString());
                        newElem.SetAttribute("Coseguro", item.CoSeguro.ToString());
                        newElem.SetAttribute("Deducible", item.Deducible.ToString());
                        newElem.SetAttribute("TotalBruto", item.ImporteBruto.ToString());
                        newElem.SetAttribute("TotalIgv", item.ImporteIgv.ToString());
                        newElem.SetAttribute("TotalNeto", item.ImporteNeto.ToString());
                        newElem.SetAttribute("NroCarta", item.NumeroCartaGarantia.ToString());
                        newElem.SetAttribute("CodEspecialidad", item.CodigoEspecialidad.ToString());
                        newElem.SetAttribute("Vigencia", item.Vigencia.ToString());

                        #endregion
                        #region Detalle
                        newElem.SetAttribute("TipoSolicitud", item.TipoCotizacion.ToString());
                        newElem.SetAttribute("NumeroSolicitud", item.NumeroSol.ToString());
                        newElem.SetAttribute("CodSecuencia", secuencia.ToString());
                        newElem.SetAttribute("CodigoServicio", item.CodigoServicio.ToString());
                        newElem.SetAttribute("Precio", item.Precio.ToString());
                        newElem.SetAttribute("Igv", item.Igv.ToString());
                        newElem.SetAttribute("Neto", item.Neto.ToString());
                        newElem.SetAttribute("Descuento", item.Descuento.ToString());
                        #endregion
                        doc.DocumentElement.AppendChild(newElem);
                    }
                    catch (Exception e)
                    {

                    }
                    #endregion
                }
                lst = CotizacionDL.ActualizarCotizacion(accion, doc.InnerXml);
                foreach (CotizacionBE item in lst)
                {
                    Resultado = item.NumeroSol;
                    break;
                }
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return Resultado;
        }

        #endregion

        #region ICotizacionBL Members


        public List<ParametrosBE> ObternerEspecializacion(int tipo, ParametrosBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<ParametrosBE> lstResult = new List<ParametrosBE>();
            try
            {
                request.NombreTabla = "TIPESP";
                lstResult = ParametrosDL.ObtenerTablaFiltrada(tipo, request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstResult;
        }

        #endregion

        #region ICotizacionBL Members
        



        public int AprobarCotizacion(CotizacionBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            int Resultado = 0;
            List<CotizacionBE> lst = new List<CotizacionBE>();
            try
            {
                 lst = CotizacionDL.ActualizarCotizacion(request);
                foreach (CotizacionBE item in lst)
                {
                    Resultado = item.NumeroSol;
                    break;
                }
            }
            catch (Exception ex)
            {
                Resultado = 1245;
                //FaultReason err = new FaultReason(ex.Message);
                //throw new FaultException(err);
            }
            return Resultado;
        }

        public int RechazarCotizacion(CotizacionBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-07-04
             ****************************************************************************************/

            int Resultado = 0;
            List<CotizacionBE> lst = new List<CotizacionBE>();
            try
            {
                 lst = CotizacionDL.RechazarCotizacion(request);
                foreach (CotizacionBE item in lst)
                {
                    Resultado = item.NumeroSol;
                    break;
                }
            }
            catch (Exception ex)
            {
               Resultado = 1245;
                //FaultReason err = new FaultReason(ex.Message);
                //throw new FaultException(err);
            }
            return Resultado;
        }

        public void AnularCotizacion(CotizacionBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : CROJAS
             * Fecha      : 2011-07-10
             ****************************************************************************************/

           
            try
            {
               CotizacionDL.AnularCotizacion(request);
         
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
          
        }

        #endregion

        #region ICotizacionBL Members


        public List<CotizacionBE> ObternerSolCotizaciones_Estado(CotizacionBE request, DateTime dtFecha_Inicio, DateTime dtFecha_Fin)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<CotizacionBE> lstReturn = new List<CotizacionBE>();
            try
            {
                lstReturn = CotizacionDL.ObtenerSolicitudesCotizacion_Estado(request, dtFecha_Inicio, dtFecha_Fin);
                foreach (CotizacionBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion

       
    }
}
